home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / C Internet Config / IC Switch Glue ƒ / IC Switch Glue.c
Encoding:
C/C++ Source or Header  |  1995-12-02  |  13.3 KB  |  529 lines  |  [TEXT/SPM ]

  1. /*
  2.     IC Switch Glue.c
  3.     
  4.     Code to handle switching between the use of the component and the use of the linked-in
  5.     routines.
  6.     
  7.     I have implemented a small modification to the switch glue.  Basically from code the switch
  8.     can be controled to act in a certain manner.  For example, the code to call the component can
  9.     be turned off so that all calls made to the switch glue will always be handled by the linked in
  10.     code.  In fact, both the component and linked in code can be disabled causing the code to always
  11.     return without doing anything to the prefs whatsoever.
  12.     
  13.     I also modified the routines to return paramErr if a null ICInstance is passed as a parameter.
  14. */
  15.  
  16. #include <AppleTalk.h>
  17. #include <Aliases.h>
  18.  
  19. // include types and key information
  20. #include "IC Types.h"
  21. #include "IC Keys.h"
  22.  
  23. // include the main header for this file
  24. #include "IC API.h"
  25.  
  26. // include the headers for the component and resource routines
  27. #include "IC Component API.h"
  28. #include "IC Resource API.h"
  29.  
  30. // vars enabling/disabling the available code
  31. static Boolean gICSwitchCanUseComponent=true;
  32. static Boolean gICSwitchCanUseLinkIn=true;
  33.  
  34. OSErr ICEnableComponent(void){
  35.     gICSwitchCanUseComponent=true;
  36.     return noErr;
  37. }
  38.  
  39. OSErr ICDisableComponent(void){
  40.     gICSwitchCanUseComponent=false;
  41.     return noErr;
  42. }
  43.  
  44. OSErr ICEnableLinkedCode(void){
  45.     gICSwitchCanUseLinkIn=true;
  46.     return noErr;
  47. }
  48.  
  49. OSErr ICDisableLinkedCode(void){
  50.     gICSwitchCanUseLinkIn=false;
  51.     return noErr;
  52. }
  53.  
  54. Boolean ICComponentEnabled(void){
  55.     return gICSwitchCanUseComponent;
  56. }
  57.  
  58. Boolean ICLinkedCodeEnabled(void){
  59.     return gICSwitchCanUseLinkIn;
  60. }
  61.  
  62. Boolean ICUsingComponent(ICInstance inst){
  63.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  64.     
  65.     // actually an error, but no way to return an error code
  66.     if (inst==(ICInstance)0)
  67.         return false;
  68.     
  69.     if (rp->instance!=(ComponentInstance)0)
  70.         return true;
  71.     return false;
  72. }
  73.  
  74. ICError ICStart(ICInstance* inst,OSType creator){
  75.     ICError err;
  76.     ICRRecordPtr instr;
  77.     
  78.     instr=(ICRRecordPtr)NewPtr(sizeof(ICRRecord));
  79.     err=MemError();
  80.     
  81.     if (err!=noErr)
  82.         return err;
  83.     
  84.     if (gICSwitchCanUseComponent){
  85.         err=ICCStart(&(instr->instance),creator);
  86.         if ((err!=noErr)&&(gICSwitchCanUseLinkIn)){
  87.             err=ICRStart(instr,creator);
  88.             gICSwitchCanUseComponent=false;
  89.         }
  90.     } else {
  91.         instr->instance=(ComponentInstance)0;
  92.         
  93.         if (gICSwitchCanUseLinkIn){
  94.             err=ICRStart(instr,creator);
  95.             if (err!=noErr)
  96.                 gICSwitchCanUseLinkIn=false;
  97.         } else {
  98.             err=icNotEnabled;
  99.         }
  100.     }
  101.     
  102.     if (err!=noErr){
  103.         DisposePtr((Ptr)instr);
  104.         *inst=(ICInstance)0;
  105.     } else {
  106.         *inst=(ICInstance)instr;
  107.     }
  108.     
  109.     return err;
  110. }
  111.  
  112. ICError ICStop(ICInstance inst){
  113.     ICError err;
  114.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  115.     
  116.     if (inst==(ICInstance)0)
  117.         return paramErr;
  118.     
  119.     if (rp->instance!=(ComponentInstance)0){
  120.         err=ICCStop(rp->instance);
  121.     } else {
  122.         err=ICRStop(rp);
  123.     }
  124.     
  125.     DisposePtr((Ptr)rp);
  126.     
  127.     return err;
  128. }
  129.  
  130. ICError ICGetComponentInstance(ICInstance inst,Ptr* cip){
  131.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  132.     
  133.     if (inst==(ICInstance)0)
  134.         return paramErr;
  135.     
  136.     *cip=(Ptr)rp->instance;
  137.     
  138.     if (*cip==(Ptr)0)
  139.         return badComponentInstance;
  140.     
  141.     return noErr;
  142. }
  143.  
  144. ICError ICFindConfigFile(ICInstance inst,short count,ICDirSpecArrayPtr folders){
  145.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  146.     
  147.     if (inst==(ICInstance)0)
  148.         return paramErr;
  149.     
  150.     if (rp->instance!=(ComponentInstance)0)
  151.         return ICCFindConfigFile(rp->instance,count,folders);
  152.     return ICRFindConfigFile(rp,count,folders);
  153. }
  154.  
  155. ICError ICFindUserConfigFile(ICInstance inst,ICDirSpec* where){
  156.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  157.     
  158.     if (inst==(ICInstance)0)
  159.         return paramErr;
  160.     
  161.     if (rp->instance!=(ComponentInstance)0)
  162.         return ICCFindUserConfigFile(rp->instance,where);
  163.     return ICRFindUserConfigFile(rp,where);
  164. }
  165.  
  166. ICError ICGeneralFindConfigFile(ICInstance inst,Boolean search_prefs,Boolean can_create,
  167.         short count,ICDirSpecArrayPtr folders){
  168.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  169.     
  170.     if (inst==(ICInstance)0)
  171.         return paramErr;
  172.     
  173.     if (rp->instance!=(ComponentInstance)0)
  174.         return ICCGeneralFindConfigFile(rp->instance,search_prefs,can_create,count,folders);
  175.     return ICRGeneralFindConfigFile(rp,search_prefs,can_create,count,folders);
  176. }
  177.  
  178. ICError ICChooseConfig(ICInstance inst){
  179.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  180.     
  181.     if (inst==(ICInstance)0)
  182.         return paramErr;
  183.     
  184.     if (rp->instance!=(ComponentInstance)0)
  185.         return ICCChooseConfig(rp->instance);
  186.     return ICRChooseConfig(rp);
  187. }
  188.  
  189. ICError ICChooseNewConfig(ICInstance inst){
  190.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  191.     
  192.     if (inst==(ICInstance)0)
  193.         return paramErr;
  194.     
  195.     if (rp->instance!=(ComponentInstance)0)
  196.         return ICCChooseNewConfig(rp->instance);
  197.     return ICRChooseNewConfig(rp);
  198. }
  199.  
  200. ICError ICGetConfigName(ICInstance inst,Boolean longname,StringPtr name){
  201.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  202.     
  203.     if (inst==(ICInstance)0)
  204.         return paramErr;
  205.     
  206.     if (rp->instance!=(ComponentInstance)0)
  207.         return ICCGetConfigName(rp->instance,longname,name);
  208.     return ICRGetConfigName(rp,longname,name);
  209. }
  210.  
  211. ICError ICGetConfigReference(ICInstance inst,ICConfigRefHandle ref){
  212.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  213.     
  214.     if (inst==(ICInstance)0)
  215.         return paramErr;
  216.     
  217.     if (rp->instance!=(ComponentInstance)0)
  218.         return ICCGetConfigReference(rp->instance,ref);
  219.     return ICRGetConfigReference(rp,ref);
  220. }
  221.  
  222. ICError ICSetConfigReference(ICInstance inst,ICConfigRefHandle ref,long flags){
  223.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  224.     
  225.     if (inst==(ICInstance)0)
  226.         return paramErr;
  227.     
  228.     if (rp->instance!=(ComponentInstance)0)
  229.         return ICCSetConfigReference(rp->instance,ref,flags);
  230.     return ICRSetConfigReference(rp,ref,flags);
  231. }
  232.  
  233. ICError ICSpecifyConfigFile(ICInstance inst,FSSpecPtr config){
  234.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  235.     
  236.     if (inst==(ICInstance)0)
  237.         return paramErr;
  238.     
  239.     if (rp->instance!=(ComponentInstance)0)
  240.         return ICCSpecifyConfigFile(rp->instance,config);
  241.     return ICRSpecifyConfigFile(rp,config);
  242. }
  243.  
  244. ICError ICGetSeed(ICInstance inst,long* seed){
  245.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  246.     
  247.     if (inst==(ICInstance)0)
  248.         return paramErr;
  249.     
  250.     if (rp->instance!=(ComponentInstance)0)
  251.         return ICCGetSeed(rp->instance,seed);
  252.     return ICRGetSeed(rp,seed);
  253. }
  254.  
  255. ICError ICGetPerm(ICInstance inst,ICPerm* perm){
  256.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  257.     
  258.     if (inst==(ICInstance)0)
  259.         return paramErr;
  260.     
  261.     if (rp->instance!=(ComponentInstance)0)
  262.         return ICCGetPerm(rp->instance,perm);
  263.     return ICRGetPerm(rp,perm);
  264. }
  265.  
  266. ICError ICDefaultFileName(ICInstance inst,StringPtr name){
  267.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  268.     
  269.     if (inst==(ICInstance)0)
  270.         return paramErr;
  271.     
  272.     if (rp->instance!=(ComponentInstance)0)
  273.         return ICCDefaultFileName(rp->instance,name);
  274.     return ICRDefaultFileName(rp,name);
  275. }
  276.  
  277. ICError ICBegin(ICInstance inst,ICPerm perm){
  278.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  279.     
  280.     if (inst==(ICInstance)0)
  281.         return paramErr;
  282.     
  283.     if (rp->instance!=(ComponentInstance)0)
  284.         return ICCBegin(rp->instance,perm);
  285.     return ICRBegin(rp,perm);
  286. }
  287.  
  288. ICError ICGetPref(ICInstance inst,StringPtr key,ICAttr* attr,Ptr buf,long* size){
  289.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  290.     
  291.     if (inst==(ICInstance)0)
  292.         return paramErr;
  293.     
  294.     if (rp->instance!=(ComponentInstance)0)
  295.         return ICCGetPref(rp->instance,key,attr,buf,size);
  296.     return ICRGetPref(rp,key,attr,buf,size);
  297. }
  298.  
  299. ICError ICSetPref(ICInstance inst,StringPtr key,ICAttr attr,Ptr buf,long size){
  300.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  301.     
  302.     if (inst==(ICInstance)0)
  303.         return paramErr;
  304.     
  305.     if (rp->instance!=(ComponentInstance)0)
  306.         return ICCSetPref(rp->instance,key,attr,buf,size);
  307.     return ICRSetPref(rp,key,attr,buf,size);
  308. }
  309.  
  310. ICError ICFindPrefHandle(ICInstance inst,StringPtr key,ICAttr* attr,Handle prefh){
  311.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  312.     
  313.     if (inst==(ICInstance)0)
  314.         return paramErr;
  315.     
  316.     if (rp->instance!=(ComponentInstance)0)
  317.         return ICCFindPrefHandle(rp->instance,key,attr,prefh);
  318.     return ICRFindPrefHandle(rp,key,attr,prefh);
  319. }
  320.  
  321. ICError ICGetPrefHandle(ICInstance inst,StringPtr key,ICAttr* attr,Handle* prefh){
  322.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  323.     
  324.     if (inst==(ICInstance)0)
  325.         return paramErr;
  326.     
  327.     if (rp->instance!=(ComponentInstance)0)
  328.         return ICCGetPrefHandle(rp->instance,key,attr,prefh);
  329.     return ICRGetPrefHandle(rp,key,attr,prefh);
  330. }
  331.  
  332. ICError ICSetPrefHandle(ICInstance inst,StringPtr key,ICAttr attr,Handle prefh){
  333.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  334.     
  335.     if (inst==(ICInstance)0)
  336.         return paramErr;
  337.     
  338.     if (rp->instance!=(ComponentInstance)0)
  339.         return ICCSetPrefHandle(rp->instance,key,attr,prefh);
  340.     return ICRSetPrefHandle(rp,key,attr,prefh);
  341. }
  342.  
  343. ICError ICCountPref(ICInstance inst,long* count){
  344.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  345.     
  346.     if (inst==(ICInstance)0)
  347.         return paramErr;
  348.     
  349.     if (rp->instance!=(ComponentInstance)0)
  350.         return ICCCountPref(rp->instance,count);
  351.     return ICRCountPref(rp,count);
  352. }
  353.  
  354. ICError ICGetIndPref(ICInstance inst,long n,StringPtr key){
  355.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  356.     
  357.     if (inst==(ICInstance)0)
  358.         return paramErr;
  359.     
  360.     if (rp->instance!=(ComponentInstance)0)
  361.         return ICCGetIndPref(rp->instance,n,key);
  362.     return ICRGetIndPref(rp,n,key);
  363. }
  364.  
  365. ICError ICDeletePref(ICInstance inst,StringPtr key){
  366.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  367.     
  368.     if (inst==(ICInstance)0)
  369.         return paramErr;
  370.     
  371.     if (rp->instance!=(ComponentInstance)0)
  372.         return ICCDeletePref(rp->instance,key);
  373.     return ICRDeletePref(rp,key);
  374. }
  375.  
  376. ICError ICEnd(ICInstance inst){
  377.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  378.     
  379.     if (inst==(ICInstance)0)
  380.         return paramErr;
  381.     
  382.     if (rp->instance!=(ComponentInstance)0)
  383.         return ICCEnd(rp->instance);
  384.     return ICREnd(rp);
  385. }
  386.  
  387. ICError ICEditPreferences(ICInstance inst,StringPtr key){
  388.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  389.     
  390.     if (inst==(ICInstance)0)
  391.         return paramErr;
  392.     
  393.     if (rp->instance!=(ComponentInstance)0)
  394.         return ICCEditPreferences(rp->instance,key);
  395.     return ICREditPreferences(rp,key);
  396. }
  397.  
  398. ICError ICParseURL(ICInstance inst,StringPtr hint,Ptr data,long len,long* selStart,long* selEnd,Handle url){
  399.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  400.     
  401.     if (inst==(ICInstance)0)
  402.         return paramErr;
  403.     
  404.     if (rp->instance!=(ComponentInstance)0)
  405.         return ICCParseURL(rp->instance,hint,data,len,selStart,selEnd,url);
  406.     return ICRParseURL(rp,hint,data,len,selStart,selEnd,url);
  407. }
  408.  
  409. ICError ICLaunchURL(ICInstance inst,StringPtr hint,Ptr data,long len,long* selStart,long* selEnd){
  410.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  411.     
  412.     if (inst==(ICInstance)0)
  413.         return paramErr;
  414.     
  415.     if (rp->instance!=(ComponentInstance)0)
  416.         return ICCLaunchURL(rp->instance,hint,data,len,selStart,selEnd);
  417.     return ICRLaunchURL(rp,hint,data,len,selStart,selEnd);
  418. }
  419.  
  420. ICError ICMapFilename(ICInstance inst,StringPtr filename,ICMapEntry* entry){
  421.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  422.     
  423.     if (inst==(ICInstance)0)
  424.         return paramErr;
  425.     
  426.     if (rp->instance!=(ComponentInstance)0)
  427.         return ICCMapFilename(rp->instance,filename,entry);
  428.     return ICRMapFilename(rp,filename,entry);
  429. }
  430.  
  431. ICError ICMapTypeCreator(ICInstance inst,OSType fType,OSType fCreator,StringPtr filename,ICMapEntry* entry){
  432.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  433.     
  434.     if (inst==(ICInstance)0)
  435.         return paramErr;
  436.     
  437.     if (rp->instance!=(ComponentInstance)0)
  438.         return ICCMapTypeCreator(rp->instance,fType,fCreator,filename,entry);
  439.     return ICRMapTypeCreator(rp,fType,fCreator,filename,entry);
  440. }
  441.  
  442. ICError ICMapEntriesFilename(ICInstance inst,Handle entries,StringPtr filename,ICMapEntry* entry){
  443.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  444.     
  445.     if (inst==(ICInstance)0)
  446.         return paramErr;
  447.     
  448.     if (rp->instance!=(ComponentInstance)0)
  449.         return ICCMapEntriesFilename(rp->instance,entries,filename,entry);
  450.     return ICRMapEntriesFilename(rp,entries,filename,entry);
  451. }
  452.  
  453. ICError ICMapEntriesTypeCreator(ICInstance inst,Handle entries,OSType fType,OSType fCreator,StringPtr filename,ICMapEntry* entry){
  454.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  455.     
  456.     if (inst==(ICInstance)0)
  457.         return paramErr;
  458.     
  459.     if (rp->instance!=(ComponentInstance)0)
  460.         return ICCMapEntriesTypeCreator(rp->instance,entries,fType,fCreator,filename,entry);
  461.     return ICRMapEntriesTypeCreator(rp,entries,fType,fCreator,filename,entry);
  462. }
  463.  
  464. ICError ICCountMapEntries(ICInstance inst,Handle entries,long* count){
  465.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  466.     
  467.     if (inst==(ICInstance)0)
  468.         return paramErr;
  469.     
  470.     if (rp->instance!=(ComponentInstance)0)
  471.         return ICCCountMapEntries(rp->instance,entries,count);
  472.     return ICRCountMapEntries(rp,entries,count);
  473. }
  474.  
  475. ICError ICGetIndMapEntry(ICInstance inst,Handle entries,long ndx,long* pos,ICMapEntry* entry){
  476.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  477.     
  478.     if (inst==(ICInstance)0)
  479.         return paramErr;
  480.     
  481.     if (rp->instance!=(ComponentInstance)0)
  482.         return ICCGetIndMapEntry(rp->instance,entries,ndx,pos,entry);
  483.     return ICRGetIndMapEntry(rp,entries,ndx,pos,entry);
  484. }
  485.  
  486. ICError ICGetMapEntry(ICInstance inst,Handle entries,long pos,ICMapEntry* entry){
  487.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  488.     
  489.     if (inst==(ICInstance)0)
  490.         return paramErr;
  491.     
  492.     if (rp->instance!=(ComponentInstance)0)
  493.         return ICCGetMapEntry(rp->instance,entries,pos,entry);
  494.     return ICRGetMapEntry(rp,entries,pos,entry);
  495. }
  496.  
  497. ICError ICSetMapEntry(ICInstance inst,Handle entries,long pos,ICMapEntry* entry){
  498.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  499.     
  500.     if (inst==(ICInstance)0)
  501.         return paramErr;
  502.     
  503.     if (rp->instance!=(ComponentInstance)0)
  504.         return ICCSetMapEntry(rp->instance,entries,pos,entry);
  505.     return ICRSetMapEntry(rp,entries,pos,entry);
  506. }
  507.  
  508. ICError ICDeleteMapEntry(ICInstance inst,Handle entries,long pos){
  509.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  510.     
  511.     if (inst==(ICInstance)0)
  512.         return paramErr;
  513.     
  514.     if (rp->instance!=(ComponentInstance)0)
  515.         return ICCDeleteMapEntry(rp->instance,entries,pos);
  516.     return ICRDeleteMapEntry(rp,entries,pos);
  517. }
  518.  
  519. ICError ICAddMapEntry(ICInstance inst,Handle entries,ICMapEntry* entry){
  520.     ICRRecordPtr rp=(ICRRecordPtr)inst;
  521.     
  522.     if (inst==(ICInstance)0)
  523.         return paramErr;
  524.     
  525.     if (rp->instance!=(ComponentInstance)0)
  526.         return ICCAddMapEntry(rp->instance,entries,entry);
  527.     return ICRAddMapEntry(rp,entries,entry);
  528. }
  529.